
import Modulos.Modulo;
import Modulos.ModuloSplit;
import java.awt.Component;
import java.util.ArrayList;
import javax.swing.*;
import modulo.ModuloCarrera;
import modulo.ModuloPersona;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Overpower
 */

public class SistemaGestionControlador {
    //==========================================================================
    // PROPIEDADES
    //==========================================================================
    //--------------------------------------------------------------------------
    static SistemaGestionControlador _instancia;
 
    SistemaGestionVista _framePrincipal;
    ArrayList<Modulo> _listaModulos;
    Modulo _moduloActivo;
    
    //==========================================================================
    // CONTRUCTORES
    //==========================================================================
    public SistemaGestionVista GetVista()
    {
        return _framePrincipal;
    }
    public SistemaGestionControlador(  )
    {
        _framePrincipal = new SistemaGestionVista();
        _framePrincipal.setVisible(true);
        _listaModulos = new ArrayList<>();
        
        /*
        ModuloSplit _c = new ModuloSplit();
        _framePrincipal.getEscritorio().add( _c);
        _c.show();
        */
        
        addListeners();
    }
    
    //==========================================================================
    // METODOS
    //==========================================================================
    
    // LISTENERS
    private void jbtnABMActionPerformed(java.awt.event.ActionEvent evt)
    {    
        MostrarModulo( Modulo.ETipoModulo.MOD_PERSONA );
    } 
    private void mostrarModuloCarrera(java.awt.event.ActionEvent evt)
    {    
        MostrarModulo( Modulo.ETipoModulo.MOD_CARRERA );
    } 
    
    private void addListeners()
    {
        _framePrincipal.getBotonAlumnos().addActionListener(this::jbtnABMActionPerformed);
        _framePrincipal.getBotonCarrera().addActionListener(this::mostrarModuloCarrera);
    }
      
    
    // Fabrica de modulos
    private Modulo CrearModulo(Modulo.ETipoModulo _mod)
    {
        Modulo _mdl = null;
        switch( _mod )
        {
            case MOD_PERSONA: _mdl = new ModuloPersona(); break;
            case MOD_CARRERA: _mdl = new ModuloCarrera(); break;
        }
        
        if( _mdl == null )
            System.out.println("EL modulo no esta implementado");
        
        return _mdl;
    }
    
    public void MostrarModulo( Modulo.ETipoModulo _mod )
    {
        // validamos para no mostrar el mismo modulo
        if( null != _moduloActivo && _mod == _moduloActivo.GetTipo() )
            return;
        
        Modulo _modulo = null;
        
        // primero vemos si ya esta añadido en la lista
        for( Modulo _mdl : _listaModulos )
        {
            if( _mdl.GetTipo() == _mod )
            {
                // lo encontramos
                _modulo = _mdl;
                break;
            }
        }
        
        // si no lo encontro, crea el modulo
        if( null == _modulo )
        {
          
            // creamos el infoModulo
            _modulo = CrearModulo(_mod);
            
            //TODO: 
            // hacer validaciones de tipo de modulo
            if( null == _modulo )
            {
                JOptionPane.showMessageDialog(_framePrincipal, "Modulo Inexistente");
                return;
            }
            
            // y lo añadimos a la lista
            _listaModulos.add(_modulo);
        }
        
        // actualizamos la pantalla con el modulo
        ActualizarPantalla( _modulo );
        
        //actualizamos el modulo que esta activo
        _moduloActivo = _modulo;
    }
    
    //--------------------------------------------------------------------------
    private void ActualizarPantalla( Modulo _modulo )
    {
        Component _vista = _modulo.getVista();
        _framePrincipal.getEscritorio().add( _vista );
        _vista.show();
    }
    
    
}
